package com.lanou3g.Code0514;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

@WebServlet(name = "AServlet",urlPatterns = "/a")
public class AServlet extends HttpServlet {
    /*
    GET请求和 POST请求的异同
    1.get请求和post请求都是HTTP协议规定的请求方式之一
    GET请求更偏向于从服务器获取数据,而不会修改服务器中已有的数据
    POST请求更偏向于向服务器发送数据
    2.GET请求 请求参数拼接在URL后 使用?隔开
    POST请求  请求参数  放在请求体中
    但是无论哪种方式,参数的格式和内容都是一样的
    每一个参数使用key=value的形式
    多个擦参数之间使用&进行连接
    3.由于GET请求的参数是放在URL上的,又因为URL是有长度限制的
    所以,GET请求不能发送过大的数据
    而post请求,由于是参数放入请求体,就没有长度限制了
    可以用来上传文件
    4.关于安全,GET和POST都一样 都不安全, 因为HTTP协议本身就是不安全的协议
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // 对request 和 response 的操作 是不分  get/post请求的
        response.setContentType("text/html;charset=utf-8");
        //使用utf-8 来解析body中的参数
        request.setCharacterEncoding("utf-8");
       String username = request.getParameter("username");
       String password =request.getParameter("password");
       String gender = request.getParameter("gender");
       //要获取 向CheckBox 这种一个那么对应多个value
        //的参数, 需要使用该方法, 返回值是String数组
       String[]hobbies = request.getParameterValues("hobby");
        PrintWriter pw = response.getWriter();
        pw.println("用户名:"+username);
        pw.println("密码:"+password);
        pw.println("性别:"+gender);
        pw.println("爱好:"+Arrays.toString(hobbies));
        //获取所有请求的参数
        //Enumeration这个对象可以"像"resultSet 一样使用
        //只有2个方法
        //hasMoreElements:是否还有没遍历的元素
        //nextElement:下一个元素

        Enumeration<String> parameterNames =request.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String name= parameterNames.nextElement();
            pw.println(name);
        }
        //获取所有的参数信息,以map的形式
        //key就是参数的name
        //value 就是参数的value
        Map<String,String[]> map= request.getParameterMap();
        //获取所有的key,组成一个set的集合
        Set<String> keySet= map.keySet();
        for (String key : keySet) {
            //为了照顾 像CheckBox这样的
            //多个value的情况  所以,value是一个数组

            String[] values = map.get(key);
            //输出看效果
            pw.println(key+"::"+Arrays.toString(values));
        }
//        Iterator<String> iterator= keySet.iterator();
//        while (iterator.hasNext()){
//            String key = iterator.next();
        }


}
